import { Injectable } from '@nestjs/common'
import { InjectRepository } from '@nestjs/typeorm'
import { Repository } from 'typeorm'
import { CreateSubPlanDto } from './dto/create-sub-plan.dto'
import { CreateSubPlanTaskDto } from './dto/create-sub-plan-task.dto'
import { UpdateSubPlanDto } from './dto/update-sub-plan.dto'
import { UpdateSubPlanTaskDto } from './dto/update-sub-plan-task.dto'
import { SubPlanEntity } from './entities/sub-plan.entity'
import { SubPlanTaskEntity } from './entities/sub-plan-task.entity'

@Injectable()
export class SubPlanService {
  constructor(
    @InjectRepository(SubPlanEntity)
    private readonly subPlanRepository: Repository<SubPlanEntity>,
    @InjectRepository(SubPlanTaskEntity)
    private readonly subPlanTaskRepository: Repository<SubPlanTaskEntity>,
  ) {}

  async create(createSubPlanDto: CreateSubPlanDto) {
    const subPlan = this.subPlanRepository.create(createSubPlanDto)
    return this.subPlanRepository.save(subPlan)
  }

  async copy(createSubPlanDto: CreateSubPlanDto) {
    const subPlan = this.subPlanRepository.create(createSubPlanDto)
    return this.subPlanRepository.save(subPlan)
  }

  async findAll() {
    return this.subPlanRepository.find()
  }

  async findOne(id: number) {
    return this.subPlanRepository.findOne({
      where: { id },
    })
  }

  async update(id: number, updateSubPlanDto: UpdateSubPlanDto) {
    const subPlan = await this.findOne(id)
    return this.subPlanRepository.save({ ...subPlan, ...updateSubPlanDto })
  }

  async delete(id: number) {
    return this.subPlanRepository.delete(id)
  }

  async createSubPlanTask(createSubPlanTaskDto: CreateSubPlanTaskDto) {
    const subPlanTask = this.subPlanTaskRepository.create(createSubPlanTaskDto)
    return this.subPlanTaskRepository.save(subPlanTask)
  }

  async findSubPlanTasks(subPlanId: string) {
    return this.subPlanTaskRepository.find({
      where: { subPlanId },
    })
  }

  async findOneSubPlanTask(id: number) {
    return this.subPlanTaskRepository.findOne({
      where: { id },
    })
  }

  async updateSubPlanTask(id: number, updateSubPlanTaskDto: UpdateSubPlanTaskDto) {
    const subPlanTask = await this.findOneSubPlanTask(id)
    return this.subPlanTaskRepository.save({ ...subPlanTask, ...updateSubPlanTaskDto })
  }

  async deleteSubPlanTask(id: number) {
    return this.subPlanTaskRepository.delete(id)
  }
}
